Closed Bug 550676 – Memory leak, update keyboard layout data table
authorSimos Xenitellis <simos@src.gnome.org>
Wed, 10 Sep 2008 18:03:53 +0000 (18:03 +0000)
committerSimos Xenitellis <simos@src.gnome.org>
Wed, 10 Sep 2008 18:03:53 +0000 (18:03 +0000)
svn path=/trunk/; revision=21339

ChangeLog
gtk/compose-parse.py
gtk/gtkimcontextsimple.c
gtk/gtkimcontextsimpleseqs.h

index 2787355bb4a56c705a56d6a747303774cefe5eb5..9df86e399112da2f405fe3d6d82e1e6e628079ca 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,21 @@
+2008-09-10  Simos Xenitellis  <simos@gnome.org>
+
+       Bug 550676 – Memory leak, update keyboard layout data structure 
+
+       * gtk/gtkimcontextsimple.c (check_normalize_nfc): Added 
+       function that checks if unicode sequence can be normalised (NFC)
+       to single character. Fixed memory leaks.
+       (check_algorithmically): Moved code to check_normalize_nfc, 
+       updated switch statement for dead keys.
+       (gtk_im_context_simple_filter_keypress): Changed order; first
+       check_algorithmically() is attempted, then check_compact_table().
+
+       * gtk/gtkimcontextsimpleseqs.c: Updated compose sequence table
+       gtk_compose_seqs_compac[].
+
+       * gtk/compose-parse.py: Updated compose table generation script,
+       matches output to gtk/gtkimcontextsimpleseqs.c.
+
 Wed Sep 10 06:18:25 2008  Søren Sandmann  <sandmann@redhat.com>
 
        * gdk/x11/gdkscreen-x11.c (init_multihead): Don't use
index 0a0119ea8234b5ad297e43d2dc9e0eefc8e6f370..f37ac04dbca34e3030ba49d250139d59bcb16e8d 100755 (executable)
@@ -279,9 +279,17 @@ def process_gdkkeysymsh():
 
        """ Patch up the keysymdb with some of our own stuff """
 
-       """ This is for a missing keysym from the currently upstread file """
+       """ This is for a missing keysym from the currently upstream file """
        keysymdb['dead_stroke'] = 0x338
 
+       """ This is for a missing keysym from the currently upstream file """
+       ###keysymdb['dead_belowring'] = 0x323
+       ###keysymdb['dead_belowmacron'] = 0x331
+       ###keysymdb['dead_belowcircumflex'] = 0x32d
+       ###keysymdb['dead_belowtilde'] = 0x330
+       ###keysymdb['dead_belowbreve'] = 0x32e
+       ###keysymdb['dead_belowdiaeresis'] = 0x324
+
        """ This is^Wwas preferential treatment for Greek """
        # keysymdb['dead_tilde'] = 0x342                
        """ This is^was preferential treatment for Greek """
@@ -327,6 +335,13 @@ def process_keysymstxt():
        keysymstxt.close()
 
        """ Patch up the keysymdb with some of our own stuff """
+       """ This is for a missing keysym from the currently upstream file """
+       ###keysymdb['dead_belowring'] = 0x323
+       ###keysymdb['dead_belowmacron'] = 0x331
+       ###keysymdb['dead_belowcircumflex'] = 0x32d
+       ###keysymdb['dead_belowtilde'] = 0x330
+       ###keysymdb['dead_belowbreve'] = 0x32e
+       ###keysymdb['dead_belowdiaeresis'] = 0x324
 
        """ This is preferential treatment for Greek """
        """ => we get more savings if used for Greek """
@@ -337,7 +352,7 @@ def process_keysymstxt():
        """ This is for a missing keysym from Markus Kuhn's db """
        keysymdb['dead_stroke'] = 0x338
        """ This is for a missing keysym from Markus Kuhn's db """
-       # keysymdb['Oslash'] = 0x0d8            
+       keysymdb['Oslash'] = 0x0d8              
 
        """ This is for a missing (recently added) keysym """
        keysymdb['dead_psili'] = 0x313          
@@ -362,8 +377,9 @@ def keysymvalue(keysym, file = "n/a", linenum = 0):
                elif keysym[:2] == '0x' and match('[0-9a-fA-F]+$', keysym[2:]):
                return atoi(keysym[2:], 16)
        else:
-               print 'UNKNOWN{%(keysym)s}' % { "keysym": keysym }
-                       sys.exit(-1)
+               #print 'UNKNOWN{%(keysym)s}' % { "keysym": keysym }
+                       return -1
+               #sys.exit(-1)
 
 def keysymunicodevalue(keysym, file = "n/a", linenum = 0):
        """ Extracts a value from the keysym """
@@ -428,13 +444,21 @@ for line in composefile.readlines():
        values = split('\s+', val)
        unichar_temp = split('"', values[0])
        unichar = unichar_temp[1]
+       if len(values) == 1:
+               continue
        codepointstr = values[1]
+       if values[1] == '#':
+               # No codepoints that are >1 characters yet.
+               continue
        if raw_sequence[0][0] == 'U' and match('[0-9a-fA-F]+$', raw_sequence[0][1:]):
                raw_sequence[0] = '0x' + raw_sequence[0][1:]
        if codepointstr[0] == 'U' and match('[0-9a-fA-F]+$', codepointstr[1:]):
                codepoint = atoi(codepointstr[1:], 16)
-       elif keysymdatabase.has_key(codepointstr):
-               codepoint = keysymdatabase[codepointstr]
+       elif keysymunicodedatabase.has_key(codepointstr):
+               if keysymdatabase[codepointstr] != keysymunicodedatabase[codepointstr]:
+                       print "DIFFERENCE: 0x%(a)X 0x%(b)X" % { "a": keysymdatabase[codepointstr], "b": keysymunicodedatabase[codepointstr]},
+                       print raw_sequence, codepointstr
+               codepoint = keysymunicodedatabase[codepointstr]
        else:
                print
                print "Invalid codepoint at line %(linenum_compose)d in %(filename)s:\
@@ -448,13 +472,21 @@ for line in composefile.readlines():
                        if opt_plane1:
                                print sequence
                        break
+               if keysymvalue(i) < 0:
+                       reject_this = True
+                       break
        if reject_this:
                continue
-       if "U0313" in sequence or "U0314" in sequence or "0x0313" in sequence or "0x0314" in sequence:
+       if "U0342" in sequence or \
+               "U0313" in sequence or \
+               "U0314" in sequence or \
+               "0x0313" in sequence or \
+               "0x0342" in sequence or \
+               "0x0314" in sequence:
                continue
-       for i in range(len(sequence)):
-               if sequence[i] == "0x0342":
-                       sequence[i] = "dead_tilde"
+       #for i in range(len(sequence)):
+       #       if sequence[i] == "0x0342":
+       #               sequence[i] = "dead_tilde"
        if "Multi_key" not in sequence:
                """ Ignore for now >0xFFFF keysyms """
                if codepoint < 0xFFFF:
@@ -473,7 +505,7 @@ for line in composefile.readlines():
                                            because of lack of dead_perispomeni (i.e. conflict)
                                        """
                                        bc = basechar
-                                       if sequence[-1] == "dead_tilde" and (bc >= 0x370 and bc <= 0x3ff) or (bc >= 0x1f00 and bc <= 0x1fff):
+                                       """if sequence[-1] == "dead_tilde" and (bc >= 0x370 and bc <= 0x3ff) or (bc >= 0x1f00 and bc <= 0x1fff):
                                                skipping_this = True
                                                break
                                        if sequence[-1] == "dead_horn" and (bc >= 0x370 and bc <= 0x3ff) or (bc >= 0x1f00 and bc <= 0x1fff):
@@ -486,6 +518,7 @@ for line in composefile.readlines():
                                                sequence[i] = "dead_horn"
                                        if sequence[-1] == "dead_dasia":
                                                sequence[-1] = "dead_ogonek"
+                                       """
                                        unisequence.append(unichr(keysymunicodevalue(sequence.pop(), filename_compose, linenum_compose)))
                                        
                                if skipping_this:
index 8e5813796faf9db5bac3151be34106141d2448a3..bb49d21db7b06c925c7491e8f7fe8a339e87a409 100644 (file)
@@ -61,7 +61,7 @@ struct _GtkComposeTableCompact
 static const GtkComposeTableCompact gtk_compose_table_compact = {
   gtk_compose_seqs_compact,
   5,
-  21,
+  22,
   6
 };
 
@@ -340,10 +340,77 @@ check_compact_table (GtkIMContextSimple    *context_simple,
   return FALSE;
 }
 
+/* This function receives a sequence of Unicode characters and tries to
+ * normalize it (NFC). We check for the case the the resulting string
+ * has length 1 (single character).
+ * NFC normalisation normally rearranges diacritic marks, unless these
+ * belong to the same Canonical Combining Class.
+ * If they belong to the same canonical combining class, we produce all
+ * permutations of the diacritic marks, then attempt to normalize.
+ */
+static gboolean
+check_normalize_nfc (gunichar* combination_buffer, gint n_compose)
+{
+  gunichar combination_buffer_temp[GTK_MAX_COMPOSE_LEN];
+  gchar *combination_utf8_temp = NULL;
+  gchar *nfc_temp = NULL;
+  gint n_combinations;
+  gunichar temp_swap;
+  gint i;
+
+  n_combinations = 1;
+
+  for (i = 1; i < n_compose; i++ )
+     n_combinations *= i;
+
+  /* Xorg reuses dead_tilde for the perispomeni diacritic mark.
+   * We check if base character belongs to Greek Unicode block,
+   * and if so, we replace tilde with perispomeni. */
+  if (combination_buffer[0] >= 0x390 && combination_buffer[0] <= 0x3FF)
+    {
+      for (i = 1; i < n_compose; i++ )
+        if (combination_buffer[i] == 0x303)
+          combination_buffer[i] = 0x342;
+    }
+
+  memcpy (combination_buffer_temp, combination_buffer, GTK_MAX_COMPOSE_LEN * sizeof (gunichar) );
+
+  for (i = 0; i < n_combinations; i++ )
+    {
+      g_unicode_canonical_ordering (combination_buffer_temp, n_compose);
+      combination_utf8_temp = g_ucs4_to_utf8 (combination_buffer_temp, -1, NULL, NULL, NULL);
+      nfc_temp = g_utf8_normalize (combination_utf8_temp, -1, G_NORMALIZE_NFC);                
+
+      if (g_utf8_strlen (nfc_temp, -1) == 1)
+        {
+          memcpy (combination_buffer, combination_buffer_temp, GTK_MAX_COMPOSE_LEN * sizeof (gunichar) );
+
+          g_free (combination_utf8_temp);
+          g_free (nfc_temp);
+
+          return TRUE;
+        }
+
+      g_free (combination_utf8_temp);
+      g_free (nfc_temp);
+
+      if (n_compose > 2)
+        {
+          temp_swap = combination_buffer_temp[i % (n_compose - 1) + 1];
+          combination_buffer_temp[i % (n_compose - 1) + 1] = combination_buffer_temp[(i+1) % (n_compose - 1) + 1];
+          combination_buffer_temp[(i+1) % (n_compose - 1) + 1] = temp_swap;
+        }
+      else
+        break;
+    }
+
+  return FALSE;
+}
+
 /* When updating the table of the compose sequences, also update here.
  */
 #define IS_DEAD_KEY(k) \
-    (((k) >= GDK_dead_grave && (k) <= GDK_dead_stroke) || \
+    (((k) >= GDK_dead_grave && (k) <= (GDK_dead_dasia+1)) || \
      g_unichar_type (gdk_keyval_to_unicode (k)) == G_UNICODE_NON_SPACING_MARK)
 
 static gboolean
@@ -351,12 +418,9 @@ check_algorithmically (GtkIMContextSimple    *context_simple,
                       gint                   n_compose)
 
 {
-  int i;
-  int k;
+  gint i;
   gunichar combination_buffer[GTK_MAX_COMPOSE_LEN];
-  gunichar combination_buffer_temp[GTK_MAX_COMPOSE_LEN];
   gchar *combination_utf8, *nfc;
-  gchar *combination_utf8_temp = NULL, *nfc_temp = NULL;
 
   if (n_compose >= GTK_MAX_COMPOSE_LEN)
     return FALSE;
@@ -381,39 +445,33 @@ check_algorithmically (GtkIMContextSimple    *context_simple,
            CASE (grave, 0x0300);
            CASE (acute, 0x0301);
            CASE (circumflex, 0x0302);
-           CASE (tilde, 0x0303);       /* Normally is 0x303; Greek Polytonic needs 0x342.
-                                        * We modified the compose sequences for now
-                                        * so that for Greek we don't apply algorithmic
-                                        * when perispomeni (0x342) is required
-                                        * Filed report; pending, bug 14013 (Freedesktop).
-                                        */
+           CASE (tilde, 0x0303);       /* Also used with perispomeni, 0x342. */
            CASE (macron, 0x0304);
            CASE (breve, 0x0306);
            CASE (abovedot, 0x0307);
            CASE (diaeresis, 0x0308);
+           CASE (hook, 0x0309);
            CASE (abovering, 0x030A);
            CASE (doubleacute, 0x030B);
            CASE (caron, 0x030C);
+           CASE (abovecomma, 0x0313);         /* Equivalent to psili */
+           CASE (abovereversedcomma, 0x0314); /* Equivalent to dasia */
+           CASE (horn, 0x031B);        /* Legacy use for psili, 0x313 (or 0x343). */
+           CASE (belowdot, 0x0323);
            CASE (cedilla, 0x0327);
-           CASE (ogonek, 0x0328);      /* Normally is 0x328; Greek Polytonic needs 0x314.
-                                        * We modified the compose sequences for now to 
-                                        * so that for Greek we don't apply algorithmic
-                                        * when dasia (0x314) is required
-                                        * Patch accepted in Xorg/GIT, may take a bit to propagate.
-                                        */
-           CASE (dasia, 0x314);
-           CASE (iota, 0x0345); /* Used by Greek Polytonic layout only; "ypogegrammeni" */
+           CASE (ogonek, 0x0328);      /* Legacy use for dasia, 0x314.*/
+           CASE (iota, 0x0345);
            CASE (voiced_sound, 0x3099);        /* Per Markus Kuhn keysyms.txt file. */
-           CASE (semivoiced_sound, 0x309a);    /* Per Markus Kuhn keysyms.txt file. */
-           CASE (belowdot, 0x0323);
-           CASE (hook, 0x0309);
-           CASE (horn, 0x031b);        /* Normally is 0x31b; Greek Polytonic needs 0x313 (or 0x343).
-                                        * We modified the compose sequences for now to 
-                                        * so that for Greek we don't apply algorithmic
-                                        * when psili (0x343) is required
-                                        * Patch accepted in Xorg/GIT, may take a bit to propagate.
-                                        */
-           CASE (psili, 0x343);
+           CASE (semivoiced_sound, 0x309A);    /* Per Markus Kuhn keysyms.txt file. */
+
+           /* The following cases are to be removed once xkeyboard-config,
+            * xorg are fully updated.
+            */
+            /* Workaround for typo in 1.4.x xserver-xorg */
+           case 0xfe66: combination_buffer[i+1] = 0x314; break;
+           /* CASE (dasia, 0x314); */
+           /* CASE (perispomeni, 0x342); */
+           /* CASE (psili, 0x343); */
 #undef CASE
            default:
              combination_buffer[i+1] = gdk_keyval_to_unicode (context_simple->compose_buffer[i]);
@@ -421,56 +479,24 @@ check_algorithmically (GtkIMContextSimple    *context_simple,
          i--;
        }
       
-      if (n_compose > 2)
-       {
-         gint n_combinations;
-         gunichar temp_swap;
-
-         /* We calculate the number of permutations of the diacritic marks, factorial(n_compose-1).
-          * When diacritic marks belong to the same Canonical Combining Class, 
-          * a normalisation does not attempt reorder them, thus we do this ourselves.
-          */
-         n_combinations = 1;
-         for (k = 1; k < n_compose; k++ )
-            n_combinations *= k;
-
-         memcpy (combination_buffer_temp, combination_buffer, GTK_MAX_COMPOSE_LEN * sizeof (gunichar) );
-
-         for (k = 0; k < n_combinations; k++ )
-            {
-              g_unicode_canonical_ordering (combination_buffer_temp, n_compose);
-              combination_utf8_temp = g_ucs4_to_utf8 (combination_buffer_temp, -1, NULL, NULL, NULL);
-               nfc_temp = g_utf8_normalize (combination_utf8_temp, -1, G_NORMALIZE_NFC);               
-
-              if (g_utf8_strlen (nfc_temp, -1) == 1)
-                {
-                  memcpy (combination_buffer, combination_buffer_temp, GTK_MAX_COMPOSE_LEN * sizeof (gunichar) );
-                  break;
-                }
-
-              temp_swap = combination_buffer_temp[k % (n_compose - 1) + 1];
-              combination_buffer_temp[k % (n_compose - 1) + 1] = combination_buffer_temp[(k+1) % (n_compose - 1) + 1];
-              combination_buffer_temp[(k+1) % (n_compose - 1) + 1] = temp_swap;
-            }
-
-         g_free (combination_utf8_temp);
-         g_free (nfc_temp);
-       }
+      /* If the buffer normalizes to a single character, 
+       * then modify the order of combination_buffer accordingly, if necessary,
+       * and return TRUE. 
+       */
+      if (check_normalize_nfc (combination_buffer, n_compose))
+        {
+         combination_utf8 = g_ucs4_to_utf8 (combination_buffer, -1, NULL, NULL, NULL);
+          nfc = g_utf8_normalize (combination_utf8, -1, G_NORMALIZE_NFC);
 
-      combination_utf8 = g_ucs4_to_utf8 (combination_buffer, -1, NULL, NULL, NULL);
-      nfc = g_utf8_normalize (combination_utf8, -1, G_NORMALIZE_NFC);
-      if (g_utf8_strlen (nfc, -1) == 1)
-       {
-         gunichar value = g_utf8_get_char (nfc);
-         gtk_im_context_simple_commit_char (GTK_IM_CONTEXT (context_simple), value);
-         context_simple->compose_buffer[0] = 0;
+          gunichar value = g_utf8_get_char (nfc);
+          gtk_im_context_simple_commit_char (GTK_IM_CONTEXT (context_simple), value);
+          context_simple->compose_buffer[0] = 0;
 
-         g_free (combination_utf8);
-         g_free (nfc);
-         return TRUE;
-       }
-      g_free (combination_utf8);
-      g_free (nfc);
+          g_free (combination_utf8);
+          g_free (nfc);
+
+          return TRUE;
+        }
     }
 
   return FALSE;
@@ -899,11 +925,11 @@ gtk_im_context_simple_filter_keypress (GtkIMContext *context,
           tmp_list = tmp_list->next;
         }
   
-      if (check_compact_table (context_simple, &gtk_compose_table_compact, n_compose))
-        return TRUE;
-
       if (check_algorithmically (context_simple, n_compose))
        return TRUE;
+
+      if (check_compact_table (context_simple, &gtk_compose_table_compact, n_compose))
+        return TRUE;
     }
   
   /* The current compose_buffer doesn't match anything */
index bcc68709c1bee73da4d210908a8d48eb1cbd43b1..2d50904e70a259f97f1bad4fc4cc561d82679d3d 100644 (file)
  */
 
 static const guint16 gtk_compose_seqs_compact[] = {
-GDK_dead_grave, 126, 182, 269, 481, 481, 
-GDK_dead_acute, 481, 539, 632, 900, 900, 
-GDK_dead_circumflex, 900, 988, 988, 1188, 1188, 
-GDK_dead_tilde, 1188, 1248, 1311, 1451, 1451, 
-GDK_dead_macron, 1451, 1475, 1475, 1547, 1547, 
-GDK_dead_breve, 1547, 1583, 1583, 1599, 1599, 
-GDK_dead_abovedot, 1599, 1613, 1613, 1645, 1645, 
-GDK_dead_diaeresis, 1645, 1709, 1709, 1733, 1733, 
-GDK_dead_abovering, 1733, 1737, 1737, 1737, 1737, 
-GDK_dead_doubleacute, 1737, 1745, 1745, 1745, 1745, 
-GDK_dead_caron, 1745, 1749, 1749, 1757, 1757, 
-GDK_dead_cedilla, 1757, 1761, 1761, 1761, 1761, 
-GDK_dead_ogonek, 1761, 1797, 1797, 1797, 1797, 
-GDK_dead_iota, 1797, 1819, 1927, 2407, 3127, 
-GDK_dead_voiced_sound, 3127, 3173, 3173, 3173, 3173, 
-GDK_dead_semivoiced_sound, 3173, 3183, 3183, 3183, 3183, 
-GDK_dead_belowdot, 3183, 3187, 3187, 3203, 3203, 
-GDK_dead_hook, 3203, 3207, 3207, 3263, 3263, 
-GDK_dead_horn, 3263, 3291, 3291, 3291, 3291, 
-GDK_dead_stroke, 3291, 3325, 3331, 3331, 3331, 
-GDK_Multi_key, 3331, 3331, 7996, 11712, 13692, 
+GDK_dead_stroke, 132, 166, 172, 172, 172, 
+GDK_dead_grave, 172, 228, 315, 527, 527, 
+GDK_dead_acute, 527, 585, 678, 954, 954, 
+GDK_dead_circumflex, 954, 1042, 1042, 1242, 1242, 
+GDK_dead_tilde, 1242, 1302, 1365, 1505, 1505, 
+GDK_dead_macron, 1505, 1529, 1529, 1601, 1601, 
+GDK_dead_breve, 1601, 1637, 1637, 1661, 1661, 
+GDK_dead_abovedot, 1661, 1675, 1675, 1707, 1707, 
+GDK_dead_diaeresis, 1707, 1771, 1771, 1795, 1795, 
+GDK_dead_abovering, 1795, 1799, 1799, 1799, 1799, 
+GDK_dead_doubleacute, 1799, 1807, 1807, 1807, 1807, 
+GDK_dead_caron, 1807, 1811, 1811, 1819, 1819, 
+GDK_dead_cedilla, 1819, 1823, 1823, 1823, 1823, 
+GDK_dead_ogonek, 1823, 1827, 1827, 1827, 1827, 
+GDK_dead_iota, 1827, 1849, 1948, 2380, 3040, 
+GDK_dead_voiced_sound, 3040, 3086, 3086, 3086, 3086, 
+GDK_dead_semivoiced_sound, 3086, 3096, 3096, 3096, 3096, 
+GDK_dead_belowdot, 3096, 3106, 3106, 3122, 3122, 
+GDK_dead_hook, 3122, 3126, 3126, 3182, 3182, 
+GDK_dead_psili, 3182, 3210, 3210, 3210, 3210, 
+GDK_dead_dasia, 3210, 3242, 3242, 3242, 3242, 
+GDK_Multi_key, 3242, 3242, 8078, 11766, 13626, 
+GDK_D, 0x0110, 
+GDK_G, 0x01E4, 
+GDK_H, 0x0126, 
+GDK_I, 0x0197, 
+GDK_L, 0x0141, 
+GDK_O, 0x00D8, 
+GDK_T, 0x0166, 
+GDK_Z, 0x01B5, 
+GDK_b, 0x0180, 
+GDK_d, 0x0111, 
+GDK_g, 0x01E5, 
+GDK_h, 0x0127, 
+GDK_i, 0x0268, 
+GDK_l, 0x0142, 
+GDK_o, 0x00F8, 
+GDK_t, 0x0167, 
+GDK_z, 0x01B6, 
+GDK_dead_acute, GDK_O, 0x01FE, 
+GDK_dead_acute, GDK_o, 0x01FF, 
 GDK_space, 0x0060, 
 GDK_Abreve, 0x1EB0, 
 GDK_abreve, 0x1EB1, 
@@ -118,33 +138,33 @@ GDK_Greek_omega, 0x1F7C,
 GDK_dead_grave, 0x0060, 
 GDK_dead_diaeresis, GDK_Greek_iota, 0x1FD2, 
 GDK_dead_diaeresis, GDK_Greek_upsilon, 0x1FE2, 
-GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F0B
-GDK_dead_ogonek, GDK_Greek_EPSILON, 0x1F1B
-GDK_dead_ogonek, GDK_Greek_ETA, 0x1F2B
-GDK_dead_ogonek, GDK_Greek_IOTA, 0x1F3B
-GDK_dead_ogonek, GDK_Greek_OMICRON, 0x1F4B
-GDK_dead_ogonek, GDK_Greek_UPSILON, 0x1F5B
-GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1F6B
-GDK_dead_ogonek, GDK_Greek_alpha, 0x1F03
-GDK_dead_ogonek, GDK_Greek_epsilon, 0x1F13
-GDK_dead_ogonek, GDK_Greek_eta, 0x1F23
-GDK_dead_ogonek, GDK_Greek_iota, 0x1F33
-GDK_dead_ogonek, GDK_Greek_omicron, 0x1F43
-GDK_dead_ogonek, GDK_Greek_upsilon, 0x1F53
-GDK_dead_ogonek, GDK_Greek_omega, 0x1F63
-GDK_dead_horn, GDK_Greek_ALPHA, 0x1F0A
-GDK_dead_horn, GDK_Greek_EPSILON, 0x1F1A
-GDK_dead_horn, GDK_Greek_ETA, 0x1F2A
-GDK_dead_horn, GDK_Greek_IOTA, 0x1F3A
-GDK_dead_horn, GDK_Greek_OMICRON, 0x1F4A
-GDK_dead_horn, GDK_Greek_OMEGA, 0x1F6A
-GDK_dead_horn, GDK_Greek_alpha, 0x1F02
-GDK_dead_horn, GDK_Greek_epsilon, 0x1F12
-GDK_dead_horn, GDK_Greek_eta, 0x1F22
-GDK_dead_horn, GDK_Greek_iota, 0x1F32
-GDK_dead_horn, GDK_Greek_omicron, 0x1F42
-GDK_dead_horn, GDK_Greek_upsilon, 0x1F52
-GDK_dead_horn, GDK_Greek_omega, 0x1F62
+GDK_dead_psili, GDK_Greek_ALPHA, 0x1F0A
+GDK_dead_psili, GDK_Greek_EPSILON, 0x1F1A
+GDK_dead_psili, GDK_Greek_ETA, 0x1F2A
+GDK_dead_psili, GDK_Greek_IOTA, 0x1F3A
+GDK_dead_psili, GDK_Greek_OMICRON, 0x1F4A
+GDK_dead_psili, GDK_Greek_OMEGA, 0x1F6A
+GDK_dead_psili, GDK_Greek_alpha, 0x1F02
+GDK_dead_psili, GDK_Greek_epsilon, 0x1F12
+GDK_dead_psili, GDK_Greek_eta, 0x1F22
+GDK_dead_psili, GDK_Greek_iota, 0x1F32
+GDK_dead_psili, GDK_Greek_omicron, 0x1F42
+GDK_dead_psili, GDK_Greek_upsilon, 0x1F52
+GDK_dead_psili, GDK_Greek_omega, 0x1F62
+GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F0B
+GDK_dead_dasia, GDK_Greek_EPSILON, 0x1F1B
+GDK_dead_dasia, GDK_Greek_ETA, 0x1F2B
+GDK_dead_dasia, GDK_Greek_IOTA, 0x1F3B
+GDK_dead_dasia, GDK_Greek_OMICRON, 0x1F4B
+GDK_dead_dasia, GDK_Greek_UPSILON, 0x1F5B
+GDK_dead_dasia, GDK_Greek_OMEGA, 0x1F6B
+GDK_dead_dasia, GDK_Greek_alpha, 0x1F03
+GDK_dead_dasia, GDK_Greek_epsilon, 0x1F13
+GDK_dead_dasia, GDK_Greek_eta, 0x1F23
+GDK_dead_dasia, GDK_Greek_iota, 0x1F33
+GDK_dead_dasia, GDK_Greek_omicron, 0x1F43
+GDK_dead_dasia, GDK_Greek_upsilon, 0x1F53
+GDK_dead_dasia, GDK_Greek_omega, 0x1F63
 GDK_Multi_key, GDK_quotedbl, GDK_U, 0x01DB, 
 GDK_Multi_key, GDK_quotedbl, GDK_u, 0x01DC, 
 GDK_Multi_key, GDK_quotedbl, GDK_Greek_iota, 0x1FD2, 
@@ -227,37 +247,37 @@ GDK_Greek_omicron, 0x03CC,
 GDK_Greek_upsilon, 0x03CD, 
 GDK_Greek_omega, 0x03CE, 
 GDK_dead_acute, 0x00B4, 
-GDK_dead_diaeresis, GDK_Greek_iota, 0x0390, 
-GDK_dead_diaeresis, GDK_Greek_upsilon, 0x03B0, 
-GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F0D, 
-GDK_dead_ogonek, GDK_Greek_EPSILON, 0x1F1D, 
-GDK_dead_ogonek, GDK_Greek_ETA, 0x1F2D, 
-GDK_dead_ogonek, GDK_Greek_IOTA, 0x1F3D, 
-GDK_dead_ogonek, GDK_Greek_OMICRON, 0x1F4D, 
-GDK_dead_ogonek, GDK_Greek_UPSILON, 0x1F5D, 
-GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1F6D, 
-GDK_dead_ogonek, GDK_Greek_alpha, 0x1F05, 
-GDK_dead_ogonek, GDK_Greek_epsilon, 0x1F15, 
-GDK_dead_ogonek, GDK_Greek_eta, 0x1F25, 
-GDK_dead_ogonek, GDK_Greek_iota, 0x1F35, 
-GDK_dead_ogonek, GDK_Greek_omicron, 0x1F45, 
-GDK_dead_ogonek, GDK_Greek_upsilon, 0x1F55, 
-GDK_dead_ogonek, GDK_Greek_omega, 0x1F65, 
-GDK_dead_horn, GDK_Greek_ALPHA, 0x1F0C, 
-GDK_dead_horn, GDK_Greek_EPSILON, 0x1F1C, 
-GDK_dead_horn, GDK_Greek_ETA, 0x1F2C, 
-GDK_dead_horn, GDK_Greek_IOTA, 0x1F3C, 
-GDK_dead_horn, GDK_Greek_OMICRON, 0x1F4C, 
-GDK_dead_horn, GDK_Greek_OMEGA, 0x1F6C, 
-GDK_dead_horn, GDK_Greek_alpha, 0x1F04, 
-GDK_dead_horn, GDK_Greek_epsilon, 0x1F14, 
-GDK_dead_horn, GDK_Greek_eta, 0x1F24, 
-GDK_dead_horn, GDK_Greek_iota, 0x1F34, 
-GDK_dead_horn, GDK_Greek_omicron, 0x1F44, 
-GDK_dead_horn, GDK_Greek_upsilon, 0x1F54, 
-GDK_dead_horn, GDK_Greek_omega, 0x1F64, 
 GDK_dead_stroke, GDK_O, 0x01FE, 
 GDK_dead_stroke, GDK_o, 0x01FF, 
+GDK_dead_diaeresis, GDK_Greek_iota, 0x0390, 
+GDK_dead_diaeresis, GDK_Greek_upsilon, 0x03B0, 
+GDK_dead_psili, GDK_Greek_ALPHA, 0x1F0C, 
+GDK_dead_psili, GDK_Greek_EPSILON, 0x1F1C, 
+GDK_dead_psili, GDK_Greek_ETA, 0x1F2C, 
+GDK_dead_psili, GDK_Greek_IOTA, 0x1F3C, 
+GDK_dead_psili, GDK_Greek_OMICRON, 0x1F4C, 
+GDK_dead_psili, GDK_Greek_OMEGA, 0x1F6C, 
+GDK_dead_psili, GDK_Greek_alpha, 0x1F04, 
+GDK_dead_psili, GDK_Greek_epsilon, 0x1F14, 
+GDK_dead_psili, GDK_Greek_eta, 0x1F24, 
+GDK_dead_psili, GDK_Greek_iota, 0x1F34, 
+GDK_dead_psili, GDK_Greek_omicron, 0x1F44, 
+GDK_dead_psili, GDK_Greek_upsilon, 0x1F54, 
+GDK_dead_psili, GDK_Greek_omega, 0x1F64, 
+GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F0D, 
+GDK_dead_dasia, GDK_Greek_EPSILON, 0x1F1D, 
+GDK_dead_dasia, GDK_Greek_ETA, 0x1F2D, 
+GDK_dead_dasia, GDK_Greek_IOTA, 0x1F3D, 
+GDK_dead_dasia, GDK_Greek_OMICRON, 0x1F4D, 
+GDK_dead_dasia, GDK_Greek_UPSILON, 0x1F5D, 
+GDK_dead_dasia, GDK_Greek_OMEGA, 0x1F6D, 
+GDK_dead_dasia, GDK_Greek_alpha, 0x1F05, 
+GDK_dead_dasia, GDK_Greek_epsilon, 0x1F15, 
+GDK_dead_dasia, GDK_Greek_eta, 0x1F25, 
+GDK_dead_dasia, GDK_Greek_iota, 0x1F35, 
+GDK_dead_dasia, GDK_Greek_omicron, 0x1F45, 
+GDK_dead_dasia, GDK_Greek_upsilon, 0x1F55, 
+GDK_dead_dasia, GDK_Greek_omega, 0x1F65, 
 GDK_Multi_key, GDK_quotedbl, GDK_I, 0x1E2E, 
 GDK_Multi_key, GDK_quotedbl, GDK_U, 0x01D7, 
 GDK_Multi_key, GDK_quotedbl, GDK_i, 0x1E2F, 
@@ -323,6 +343,8 @@ GDK_Multi_key, GDK_macron, GDK_E, 0x1E16,
 GDK_Multi_key, GDK_macron, GDK_O, 0x1E52, 
 GDK_Multi_key, GDK_macron, GDK_e, 0x1E17, 
 GDK_Multi_key, GDK_macron, GDK_o, 0x1E53, 
+GDK_Multi_key, GDK_cedilla, GDK_C, 0x1E08, 
+GDK_Multi_key, GDK_cedilla, GDK_c, 0x1E09, 
 GDK_Multi_key, GDK_KP_Divide, GDK_O, 0x01FE, 
 GDK_Multi_key, GDK_KP_Divide, GDK_o, 0x01FF, 
 GDK_space, 0x005E, 
@@ -451,25 +473,25 @@ GDK_Greek_omega, 0x1FF6,
 GDK_dead_tilde, 0x007E, 
 GDK_dead_diaeresis, GDK_Greek_iota, 0x1FD7, 
 GDK_dead_diaeresis, GDK_Greek_upsilon, 0x1FE7, 
-GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F0F
-GDK_dead_ogonek, GDK_Greek_ETA, 0x1F2F
-GDK_dead_ogonek, GDK_Greek_IOTA, 0x1F3F
-GDK_dead_ogonek, GDK_Greek_UPSILON, 0x1F5F
-GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1F6F
-GDK_dead_ogonek, GDK_Greek_alpha, 0x1F07
-GDK_dead_ogonek, GDK_Greek_eta, 0x1F27
-GDK_dead_ogonek, GDK_Greek_iota, 0x1F37
-GDK_dead_ogonek, GDK_Greek_upsilon, 0x1F57
-GDK_dead_ogonek, GDK_Greek_omega, 0x1F67
-GDK_dead_horn, GDK_Greek_ALPHA, 0x1F0E
-GDK_dead_horn, GDK_Greek_ETA, 0x1F2E
-GDK_dead_horn, GDK_Greek_IOTA, 0x1F3E
-GDK_dead_horn, GDK_Greek_OMEGA, 0x1F6E
-GDK_dead_horn, GDK_Greek_alpha, 0x1F06
-GDK_dead_horn, GDK_Greek_eta, 0x1F26
-GDK_dead_horn, GDK_Greek_iota, 0x1F36
-GDK_dead_horn, GDK_Greek_upsilon, 0x1F56
-GDK_dead_horn, GDK_Greek_omega, 0x1F66
+GDK_dead_psili, GDK_Greek_ALPHA, 0x1F0E
+GDK_dead_psili, GDK_Greek_ETA, 0x1F2E
+GDK_dead_psili, GDK_Greek_IOTA, 0x1F3E
+GDK_dead_psili, GDK_Greek_OMEGA, 0x1F6E
+GDK_dead_psili, GDK_Greek_alpha, 0x1F06
+GDK_dead_psili, GDK_Greek_eta, 0x1F26
+GDK_dead_psili, GDK_Greek_iota, 0x1F36
+GDK_dead_psili, GDK_Greek_upsilon, 0x1F56
+GDK_dead_psili, GDK_Greek_omega, 0x1F66
+GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F0F
+GDK_dead_dasia, GDK_Greek_ETA, 0x1F2F
+GDK_dead_dasia, GDK_Greek_IOTA, 0x1F3F
+GDK_dead_dasia, GDK_Greek_UPSILON, 0x1F5F
+GDK_dead_dasia, GDK_Greek_OMEGA, 0x1F6F
+GDK_dead_dasia, GDK_Greek_alpha, 0x1F07
+GDK_dead_dasia, GDK_Greek_eta, 0x1F27
+GDK_dead_dasia, GDK_Greek_iota, 0x1F37
+GDK_dead_dasia, GDK_Greek_upsilon, 0x1F57
+GDK_dead_dasia, GDK_Greek_omega, 0x1F67
 GDK_Multi_key, GDK_quotedbl, GDK_Greek_iota, 0x1FD7, 
 GDK_Multi_key, GDK_quotedbl, GDK_Greek_upsilon, 0x1FE7, 
 GDK_Multi_key, GDK_parenleft, GDK_Greek_ALPHA, 0x1F0F, 
@@ -557,6 +579,8 @@ GDK_Multi_key, GDK_exclam, GDK_A, 0x1EB6,
 GDK_Multi_key, GDK_exclam, GDK_a, 0x1EB7, 
 GDK_Multi_key, GDK_comma, GDK_E, 0x1E1C, 
 GDK_Multi_key, GDK_comma, GDK_e, 0x1E1D, 
+GDK_Multi_key, GDK_cedilla, GDK_E, 0x1E1C, 
+GDK_Multi_key, GDK_cedilla, GDK_e, 0x1E1D, 
 GDK_space, 0x02D9, 
 GDK_i, 0x0131, 
 GDK_Sacute, 0x1E64, 
@@ -623,22 +647,6 @@ GDK_Multi_key, GDK_quotedbl, GDK_u, 0x01DA,
 GDK_space, 0x00B8, 
 GDK_dead_cedilla, 0x00B8, 
 GDK_space, 0x02DB, 
-GDK_Greek_ALPHA, 0x1F09, 
-GDK_Greek_EPSILON, 0x1F19, 
-GDK_Greek_ETA, 0x1F29, 
-GDK_Greek_IOTA, 0x1F39, 
-GDK_Greek_OMICRON, 0x1F49, 
-GDK_Greek_RHO, 0x1FEC, 
-GDK_Greek_UPSILON, 0x1F59, 
-GDK_Greek_OMEGA, 0x1F69, 
-GDK_Greek_alpha, 0x1F01, 
-GDK_Greek_epsilon, 0x1F11, 
-GDK_Greek_eta, 0x1F21, 
-GDK_Greek_iota, 0x1F31, 
-GDK_Greek_omicron, 0x1F41, 
-GDK_Greek_rho, 0x1FE5, 
-GDK_Greek_upsilon, 0x1F51, 
-GDK_Greek_omega, 0x1F61, 
 GDK_dead_ogonek, 0x02DB, 
 GDK_space, 0x037A, 
 GDK_Greek_alphaaccent, 0x1FB4, 
@@ -651,9 +659,6 @@ GDK_Greek_alpha, 0x1FB3,
 GDK_Greek_eta, 0x1FC3, 
 GDK_Greek_omega, 0x1FF3, 
 GDK_dead_iota, 0x037A, 
-0x0342, GDK_Greek_alpha, 0x1FB7, 
-0x0342, GDK_Greek_eta, 0x1FC7, 
-0x0342, GDK_Greek_omega, 0x1FF7, 
 GDK_dead_grave, GDK_Greek_alpha, 0x1FB2, 
 GDK_dead_grave, GDK_Greek_eta, 0x1FC2, 
 GDK_dead_grave, GDK_Greek_omega, 0x1FF2, 
@@ -675,66 +680,54 @@ GDK_dead_tilde, 0x1F60, 0x1FA6,
 GDK_dead_tilde, 0x1F61, 0x1FA7, 
 GDK_dead_tilde, 0x1F68, 0x1FAE, 
 GDK_dead_tilde, 0x1F69, 0x1FAF, 
-GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F89, 
-GDK_dead_ogonek, GDK_Greek_ETA, 0x1F99, 
-GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1FA9, 
-GDK_dead_ogonek, GDK_Greek_alpha, 0x1F81, 
-GDK_dead_ogonek, GDK_Greek_eta, 0x1F91, 
-GDK_dead_ogonek, GDK_Greek_omega, 0x1FA1, 
-GDK_dead_horn, GDK_Greek_ALPHA, 0x1F88, 
-GDK_dead_horn, GDK_Greek_ETA, 0x1F98, 
-GDK_dead_horn, GDK_Greek_OMEGA, 0x1FA8, 
-GDK_dead_horn, GDK_Greek_alpha, 0x1F80, 
-GDK_dead_horn, GDK_Greek_eta, 0x1F90, 
-GDK_dead_horn, GDK_Greek_omega, 0x1FA0, 
-0x0342, GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F8F, 
-0x0342, GDK_dead_ogonek, GDK_Greek_ETA, 0x1F9F, 
-0x0342, GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1FAF, 
-0x0342, GDK_dead_ogonek, GDK_Greek_alpha, 0x1F87, 
-0x0342, GDK_dead_ogonek, GDK_Greek_eta, 0x1F97, 
-0x0342, GDK_dead_ogonek, GDK_Greek_omega, 0x1FA7, 
-0x0342, GDK_dead_horn, GDK_Greek_ALPHA, 0x1F8E, 
-0x0342, GDK_dead_horn, GDK_Greek_ETA, 0x1F9E, 
-0x0342, GDK_dead_horn, GDK_Greek_OMEGA, 0x1FAE, 
-0x0342, GDK_dead_horn, GDK_Greek_alpha, 0x1F86, 
-0x0342, GDK_dead_horn, GDK_Greek_eta, 0x1F96, 
-0x0342, GDK_dead_horn, GDK_Greek_omega, 0x1FA6, 
-GDK_dead_grave, GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F8B, 
-GDK_dead_grave, GDK_dead_ogonek, GDK_Greek_ETA, 0x1F9B, 
-GDK_dead_grave, GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1FAB, 
-GDK_dead_grave, GDK_dead_ogonek, GDK_Greek_alpha, 0x1F83, 
-GDK_dead_grave, GDK_dead_ogonek, GDK_Greek_eta, 0x1F93, 
-GDK_dead_grave, GDK_dead_ogonek, GDK_Greek_omega, 0x1FA3, 
-GDK_dead_grave, GDK_dead_horn, GDK_Greek_ALPHA, 0x1F8A, 
-GDK_dead_grave, GDK_dead_horn, GDK_Greek_ETA, 0x1F9A, 
-GDK_dead_grave, GDK_dead_horn, GDK_Greek_OMEGA, 0x1FAA, 
-GDK_dead_grave, GDK_dead_horn, GDK_Greek_alpha, 0x1F82, 
-GDK_dead_grave, GDK_dead_horn, GDK_Greek_eta, 0x1F92, 
-GDK_dead_grave, GDK_dead_horn, GDK_Greek_omega, 0x1FA2, 
-GDK_dead_acute, GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F8D, 
-GDK_dead_acute, GDK_dead_ogonek, GDK_Greek_ETA, 0x1F9D, 
-GDK_dead_acute, GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1FAD, 
-GDK_dead_acute, GDK_dead_ogonek, GDK_Greek_alpha, 0x1F85, 
-GDK_dead_acute, GDK_dead_ogonek, GDK_Greek_eta, 0x1F95, 
-GDK_dead_acute, GDK_dead_ogonek, GDK_Greek_omega, 0x1FA5, 
-GDK_dead_acute, GDK_dead_horn, GDK_Greek_ALPHA, 0x1F8C, 
-GDK_dead_acute, GDK_dead_horn, GDK_Greek_ETA, 0x1F9C, 
-GDK_dead_acute, GDK_dead_horn, GDK_Greek_OMEGA, 0x1FAC, 
-GDK_dead_acute, GDK_dead_horn, GDK_Greek_alpha, 0x1F84, 
-GDK_dead_acute, GDK_dead_horn, GDK_Greek_eta, 0x1F94, 
-GDK_dead_acute, GDK_dead_horn, GDK_Greek_omega, 0x1FA4, 
-GDK_dead_tilde, GDK_dead_ogonek, GDK_Greek_ALPHA, 0x1F8F, 
-GDK_dead_tilde, GDK_dead_ogonek, GDK_Greek_ETA, 0x1F9F, 
-GDK_dead_tilde, GDK_dead_ogonek, GDK_Greek_OMEGA, 0x1FAF, 
-GDK_dead_tilde, GDK_dead_ogonek, GDK_Greek_alpha, 0x1F87, 
-GDK_dead_tilde, GDK_dead_ogonek, GDK_Greek_eta, 0x1F97, 
-GDK_dead_tilde, GDK_dead_ogonek, GDK_Greek_omega, 0x1FA7, 
-GDK_dead_tilde, GDK_dead_horn, GDK_Greek_ALPHA, 0x1F8E, 
-GDK_dead_tilde, GDK_dead_horn, GDK_Greek_ETA, 0x1F9E, 
-GDK_dead_tilde, GDK_dead_horn, GDK_Greek_OMEGA, 0x1FAE, 
-GDK_dead_tilde, GDK_dead_horn, GDK_Greek_alpha, 0x1F86, 
-GDK_dead_tilde, GDK_dead_horn, GDK_Greek_eta, 0x1F96, 
-GDK_dead_tilde, GDK_dead_horn, GDK_Greek_omega, 0x1FA6, 
+GDK_dead_psili, GDK_Greek_ALPHA, 0x1F88, 
+GDK_dead_psili, GDK_Greek_ETA, 0x1F98, 
+GDK_dead_psili, GDK_Greek_OMEGA, 0x1FA8, 
+GDK_dead_psili, GDK_Greek_alpha, 0x1F80, 
+GDK_dead_psili, GDK_Greek_eta, 0x1F90, 
+GDK_dead_psili, GDK_Greek_omega, 0x1FA0, 
+GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F89, 
+GDK_dead_dasia, GDK_Greek_ETA, 0x1F99, 
+GDK_dead_dasia, GDK_Greek_OMEGA, 0x1FA9, 
+GDK_dead_dasia, GDK_Greek_alpha, 0x1F81, 
+GDK_dead_dasia, GDK_Greek_eta, 0x1F91, 
+GDK_dead_dasia, GDK_Greek_omega, 0x1FA1, 
+GDK_dead_grave, GDK_dead_psili, GDK_Greek_ALPHA, 0x1F8A, 
+GDK_dead_grave, GDK_dead_psili, GDK_Greek_ETA, 0x1F9A, 
+GDK_dead_grave, GDK_dead_psili, GDK_Greek_OMEGA, 0x1FAA, 
+GDK_dead_grave, GDK_dead_psili, GDK_Greek_alpha, 0x1F82, 
+GDK_dead_grave, GDK_dead_psili, GDK_Greek_eta, 0x1F92, 
+GDK_dead_grave, GDK_dead_psili, GDK_Greek_omega, 0x1FA2, 
+GDK_dead_grave, GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F8B, 
+GDK_dead_grave, GDK_dead_dasia, GDK_Greek_ETA, 0x1F9B, 
+GDK_dead_grave, GDK_dead_dasia, GDK_Greek_OMEGA, 0x1FAB, 
+GDK_dead_grave, GDK_dead_dasia, GDK_Greek_alpha, 0x1F83, 
+GDK_dead_grave, GDK_dead_dasia, GDK_Greek_eta, 0x1F93, 
+GDK_dead_grave, GDK_dead_dasia, GDK_Greek_omega, 0x1FA3, 
+GDK_dead_acute, GDK_dead_psili, GDK_Greek_ALPHA, 0x1F8C, 
+GDK_dead_acute, GDK_dead_psili, GDK_Greek_ETA, 0x1F9C, 
+GDK_dead_acute, GDK_dead_psili, GDK_Greek_OMEGA, 0x1FAC, 
+GDK_dead_acute, GDK_dead_psili, GDK_Greek_alpha, 0x1F84, 
+GDK_dead_acute, GDK_dead_psili, GDK_Greek_eta, 0x1F94, 
+GDK_dead_acute, GDK_dead_psili, GDK_Greek_omega, 0x1FA4, 
+GDK_dead_acute, GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F8D, 
+GDK_dead_acute, GDK_dead_dasia, GDK_Greek_ETA, 0x1F9D, 
+GDK_dead_acute, GDK_dead_dasia, GDK_Greek_OMEGA, 0x1FAD, 
+GDK_dead_acute, GDK_dead_dasia, GDK_Greek_alpha, 0x1F85, 
+GDK_dead_acute, GDK_dead_dasia, GDK_Greek_eta, 0x1F95, 
+GDK_dead_acute, GDK_dead_dasia, GDK_Greek_omega, 0x1FA5, 
+GDK_dead_tilde, GDK_dead_psili, GDK_Greek_ALPHA, 0x1F8E, 
+GDK_dead_tilde, GDK_dead_psili, GDK_Greek_ETA, 0x1F9E, 
+GDK_dead_tilde, GDK_dead_psili, GDK_Greek_OMEGA, 0x1FAE, 
+GDK_dead_tilde, GDK_dead_psili, GDK_Greek_alpha, 0x1F86, 
+GDK_dead_tilde, GDK_dead_psili, GDK_Greek_eta, 0x1F96, 
+GDK_dead_tilde, GDK_dead_psili, GDK_Greek_omega, 0x1FA6, 
+GDK_dead_tilde, GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F8F, 
+GDK_dead_tilde, GDK_dead_dasia, GDK_Greek_ETA, 0x1F9F, 
+GDK_dead_tilde, GDK_dead_dasia, GDK_Greek_OMEGA, 0x1FAF, 
+GDK_dead_tilde, GDK_dead_dasia, GDK_Greek_alpha, 0x1F87, 
+GDK_dead_tilde, GDK_dead_dasia, GDK_Greek_eta, 0x1F97, 
+GDK_dead_tilde, GDK_dead_dasia, GDK_Greek_omega, 0x1FA7, 
 GDK_Multi_key, GDK_apostrophe, GDK_Greek_alpha, 0x1FB4, 
 GDK_Multi_key, GDK_apostrophe, GDK_Greek_eta, 0x1FC4, 
 GDK_Multi_key, GDK_apostrophe, GDK_Greek_omega, 0x1FF4, 
@@ -807,18 +800,6 @@ GDK_Multi_key, GDK_acute, 0x1F60, 0x1FA4,
 GDK_Multi_key, GDK_acute, 0x1F61, 0x1FA5, 
 GDK_Multi_key, GDK_acute, 0x1F68, 0x1FAC, 
 GDK_Multi_key, GDK_acute, 0x1F69, 0x1FAD, 
-0x0342, GDK_Multi_key, GDK_parenleft, GDK_Greek_ALPHA, 0x1F8F, 
-0x0342, GDK_Multi_key, GDK_parenleft, GDK_Greek_ETA, 0x1F9F, 
-0x0342, GDK_Multi_key, GDK_parenleft, GDK_Greek_OMEGA, 0x1FAF, 
-0x0342, GDK_Multi_key, GDK_parenleft, GDK_Greek_alpha, 0x1F87, 
-0x0342, GDK_Multi_key, GDK_parenleft, GDK_Greek_eta, 0x1F97, 
-0x0342, GDK_Multi_key, GDK_parenleft, GDK_Greek_omega, 0x1FA7, 
-0x0342, GDK_Multi_key, GDK_parenright, GDK_Greek_ALPHA, 0x1F8E, 
-0x0342, GDK_Multi_key, GDK_parenright, GDK_Greek_ETA, 0x1F9E, 
-0x0342, GDK_Multi_key, GDK_parenright, GDK_Greek_OMEGA, 0x1FAE, 
-0x0342, GDK_Multi_key, GDK_parenright, GDK_Greek_alpha, 0x1F86, 
-0x0342, GDK_Multi_key, GDK_parenright, GDK_Greek_eta, 0x1F96, 
-0x0342, GDK_Multi_key, GDK_parenright, GDK_Greek_omega, 0x1FA6, 
 GDK_dead_grave, GDK_Multi_key, GDK_parenleft, GDK_Greek_ALPHA, 0x1F8B, 
 GDK_dead_grave, GDK_Multi_key, GDK_parenleft, GDK_Greek_ETA, 0x1F9B, 
 GDK_dead_grave, GDK_Multi_key, GDK_parenleft, GDK_Greek_OMEGA, 0x1FAB, 
@@ -979,6 +960,9 @@ GDK_kana_HI, 0x30D4,
 GDK_kana_FU, 0x30D7, 
 GDK_kana_HE, 0x30DA, 
 GDK_kana_HO, 0x30DD, 
+GDK_plus, 0x2A25, 
+GDK_minus, 0x2A2A, 
+GDK_equal, 0x2A66, 
 GDK_Abreve, 0x1EB6, 
 GDK_abreve, 0x1EB7, 
 GDK_Multi_key, GDK_plus, GDK_O, 0x1EE2, 
@@ -1015,25 +999,22 @@ GDK_Greek_omicron, 0x1F40,
 GDK_Greek_rho, 0x1FE4, 
 GDK_Greek_upsilon, 0x1F50, 
 GDK_Greek_omega, 0x1F60, 
-GDK_D, 0x0110, 
-GDK_G, 0x01E4, 
-GDK_H, 0x0126, 
-GDK_I, 0x0197, 
-GDK_L, 0x0141, 
-GDK_O, 0x00D8, 
-GDK_T, 0x0166, 
-GDK_Z, 0x01B5, 
-GDK_b, 0x0180, 
-GDK_d, 0x0111, 
-GDK_g, 0x01E5, 
-GDK_h, 0x0127, 
-GDK_i, 0x0268, 
-GDK_l, 0x0142, 
-GDK_o, 0x00F8, 
-GDK_t, 0x0167, 
-GDK_z, 0x01B6, 
-GDK_dead_acute, GDK_O, 0x01FE, 
-GDK_dead_acute, GDK_o, 0x01FF, 
+GDK_Greek_ALPHA, 0x1F09, 
+GDK_Greek_EPSILON, 0x1F19, 
+GDK_Greek_ETA, 0x1F29, 
+GDK_Greek_IOTA, 0x1F39, 
+GDK_Greek_OMICRON, 0x1F49, 
+GDK_Greek_RHO, 0x1FEC, 
+GDK_Greek_UPSILON, 0x1F59, 
+GDK_Greek_OMEGA, 0x1F69, 
+GDK_Greek_alpha, 0x1F01, 
+GDK_Greek_epsilon, 0x1F11, 
+GDK_Greek_eta, 0x1F21, 
+GDK_Greek_iota, 0x1F31, 
+GDK_Greek_omicron, 0x1F41, 
+GDK_Greek_rho, 0x1FE5, 
+GDK_Greek_upsilon, 0x1F51, 
+GDK_Greek_omega, 0x1F61, 
 GDK_space, GDK_space, 0x00A0, 
 GDK_space, GDK_apostrophe, 0x0027, 
 GDK_space, GDK_comma, 0x00B8, 
@@ -1044,6 +1025,7 @@ GDK_space, GDK_asciicircum, 0x005E,
 GDK_space, GDK_grave, 0x0060, 
 GDK_space, GDK_asciitilde, 0x007E, 
 GDK_exclam, GDK_exclam, 0x00A1, 
+GDK_exclam, GDK_question, 0x203D, 
 GDK_exclam, GDK_A, 0x1EA0, 
 GDK_exclam, GDK_B, 0x1E04, 
 GDK_exclam, GDK_D, 0x1E0C, 
@@ -1083,6 +1065,10 @@ GDK_exclam, GDK_v, 0x1E7F,
 GDK_exclam, GDK_w, 0x1E89, 
 GDK_exclam, GDK_y, 0x1EF5, 
 GDK_exclam, GDK_z, 0x1E93, 
+GDK_exclam, GDK_Ohorn, 0x1EE2, 
+GDK_exclam, GDK_ohorn, 0x1EE3, 
+GDK_exclam, GDK_Uhorn, 0x1EF0, 
+GDK_exclam, GDK_uhorn, 0x1EF1, 
 GDK_quotedbl, GDK_apostrophe, 0x0344, 
 GDK_quotedbl, GDK_comma, 0x201E, 
 GDK_quotedbl, GDK_slash, 0x301E, 
@@ -1207,6 +1193,10 @@ GDK_apostrophe, GDK_ocircumflex, 0x1ED1,
 GDK_apostrophe, GDK_otilde, 0x1E4D, 
 GDK_apostrophe, GDK_oslash, 0x01FF, 
 GDK_apostrophe, GDK_udiaeresis, 0x01D8, 
+GDK_apostrophe, GDK_Ohorn, 0x1EDA, 
+GDK_apostrophe, GDK_ohorn, 0x1EDB, 
+GDK_apostrophe, GDK_Uhorn, 0x1EE8, 
+GDK_apostrophe, GDK_uhorn, 0x1EE9, 
 GDK_apostrophe, GDK_Abreve, 0x1EAE, 
 GDK_apostrophe, GDK_abreve, 0x1EAF, 
 GDK_apostrophe, GDK_Emacron, 0x1E16, 
@@ -1421,8 +1411,20 @@ GDK_slash, GDK_leftarrow, 0x219A,
 GDK_slash, GDK_rightarrow, 0x219B, 
 GDK_slash, 0x2194, 0x21AE, 
 GDK_1, GDK_2, 0x00BD, 
+GDK_1, GDK_3, 0x2153, 
 GDK_1, GDK_4, 0x00BC, 
+GDK_1, GDK_5, 0x2155, 
+GDK_1, GDK_6, 0x2159, 
+GDK_1, GDK_8, 0x215B, 
+GDK_2, GDK_3, 0x2154, 
+GDK_2, GDK_5, 0x2156, 
 GDK_3, GDK_4, 0x00BE, 
+GDK_3, GDK_5, 0x2157, 
+GDK_3, GDK_8, 0x215C, 
+GDK_4, GDK_5, 0x2158, 
+GDK_5, GDK_6, 0x215A, 
+GDK_5, GDK_8, 0x215D, 
+GDK_7, GDK_8, 0x215E, 
 GDK_colon, GDK_minus, 0x00F7, 
 GDK_semicolon, GDK_A, 0x0104, 
 GDK_semicolon, GDK_E, 0x0118, 
@@ -1461,6 +1463,7 @@ GDK_greater, GDK_quotedbl, 0x201D,
 GDK_greater, GDK_apostrophe, 0x2019, 
 GDK_greater, GDK_greater, 0x00BB, 
 GDK_greater, 0x0338, 0x226F, 
+GDK_question, GDK_exclam, 0x203D, 
 GDK_question, GDK_question, 0x00BF, 
 GDK_question, GDK_A, 0x1EA2, 
 GDK_question, GDK_E, 0x1EBA, 
@@ -1480,6 +1483,10 @@ GDK_question, GDK_Ocircumflex, 0x1ED4,
 GDK_question, GDK_acircumflex, 0x1EA9, 
 GDK_question, GDK_ecircumflex, 0x1EC3, 
 GDK_question, GDK_ocircumflex, 0x1ED5, 
+GDK_question, GDK_Ohorn, 0x1EDE, 
+GDK_question, GDK_ohorn, 0x1EDF, 
+GDK_question, GDK_Uhorn, 0x1EEC, 
+GDK_question, GDK_uhorn, 0x1EED, 
 GDK_question, GDK_Abreve, 0x1EB2, 
 GDK_question, GDK_abreve, 0x1EB3, 
 GDK_A, GDK_E, 0x00C6, 
@@ -1720,6 +1727,10 @@ GDK_grave, GDK_acircumflex, 0x1EA7,
 GDK_grave, GDK_ecircumflex, 0x1EC1, 
 GDK_grave, GDK_ocircumflex, 0x1ED3, 
 GDK_grave, GDK_udiaeresis, 0x01DC, 
+GDK_grave, GDK_Ohorn, 0x1EDC, 
+GDK_grave, GDK_ohorn, 0x1EDD, 
+GDK_grave, GDK_Uhorn, 0x1EEA, 
+GDK_grave, GDK_uhorn, 0x1EEB, 
 GDK_grave, GDK_Abreve, 0x1EB0, 
 GDK_grave, GDK_abreve, 0x1EB1, 
 GDK_grave, GDK_Emacron, 0x1E14, 
@@ -1908,6 +1919,10 @@ GDK_asciitilde, GDK_Ocircumflex, 0x1ED6,
 GDK_asciitilde, GDK_acircumflex, 0x1EAB, 
 GDK_asciitilde, GDK_ecircumflex, 0x1EC5, 
 GDK_asciitilde, GDK_ocircumflex, 0x1ED7, 
+GDK_asciitilde, GDK_Ohorn, 0x1EE0, 
+GDK_asciitilde, GDK_ohorn, 0x1EE1, 
+GDK_asciitilde, GDK_Uhorn, 0x1EEE, 
+GDK_asciitilde, GDK_uhorn, 0x1EEF, 
 GDK_asciitilde, GDK_Abreve, 0x1EB4, 
 GDK_asciitilde, GDK_abreve, 0x1EB5, 
 GDK_asciitilde, GDK_Greek_iotadieresis, 0x1FD7, 
@@ -1940,7 +1955,6 @@ GDK_diaeresis, GDK_apostrophe, 0x0385,
 GDK_diaeresis, GDK_grave, 0x1FED, 
 GDK_diaeresis, GDK_asciitilde, 0x1FC1, 
 GDK_diaeresis, GDK_acute, 0x0385, 
-GDK_diaeresis, 0x0342, 0x1FC1, 
 GDK_diaeresis, GDK_dead_grave, 0x1FED, 
 GDK_diaeresis, GDK_dead_acute, 0x0385, 
 GDK_diaeresis, GDK_dead_tilde, 0x1FC1, 
@@ -2042,6 +2056,10 @@ GDK_acute, GDK_ocircumflex, 0x1ED1,
 GDK_acute, GDK_otilde, 0x1E4D, 
 GDK_acute, GDK_oslash, 0x01FF, 
 GDK_acute, GDK_udiaeresis, 0x01D8, 
+GDK_acute, GDK_Ohorn, 0x1EDA, 
+GDK_acute, GDK_ohorn, 0x1EDB, 
+GDK_acute, GDK_Uhorn, 0x1EE8, 
+GDK_acute, GDK_uhorn, 0x1EE9, 
 GDK_acute, GDK_Abreve, 0x1EAE, 
 GDK_acute, GDK_abreve, 0x1EAF, 
 GDK_acute, GDK_Emacron, 0x1E16, 
@@ -2097,6 +2115,28 @@ GDK_acute, 0x1F60, 0x1F64,
 GDK_acute, 0x1F61, 0x1F65, 
 GDK_acute, 0x1F68, 0x1F6C, 
 GDK_acute, 0x1F69, 0x1F6D, 
+GDK_cedilla, GDK_C, 0x00C7, 
+GDK_cedilla, GDK_D, 0x1E10, 
+GDK_cedilla, GDK_E, 0x0228, 
+GDK_cedilla, GDK_G, 0x0122, 
+GDK_cedilla, GDK_H, 0x1E28, 
+GDK_cedilla, GDK_K, 0x0136, 
+GDK_cedilla, GDK_L, 0x013B, 
+GDK_cedilla, GDK_N, 0x0145, 
+GDK_cedilla, GDK_R, 0x0156, 
+GDK_cedilla, GDK_S, 0x015E, 
+GDK_cedilla, GDK_T, 0x0162, 
+GDK_cedilla, GDK_c, 0x00E7, 
+GDK_cedilla, GDK_d, 0x1E11, 
+GDK_cedilla, GDK_e, 0x0229, 
+GDK_cedilla, GDK_g, 0x0123, 
+GDK_cedilla, GDK_h, 0x1E29, 
+GDK_cedilla, GDK_k, 0x0137, 
+GDK_cedilla, GDK_l, 0x013C, 
+GDK_cedilla, GDK_n, 0x0146, 
+GDK_cedilla, GDK_r, 0x0157, 
+GDK_cedilla, GDK_s, 0x015F, 
+GDK_cedilla, GDK_t, 0x0163, 
 0x05B4, GDK_hebrew_yod, 0xFB1D, 
 0x05B7, 0x05F2, 0xFB1F, 
 0x05B7, GDK_hebrew_aleph, 0xFB2E, 
@@ -2520,7 +2560,6 @@ GDK_righttack, 0x0338, 0x22AC,
 0x1FBF, GDK_grave, 0x1FCD, 
 0x1FBF, GDK_asciitilde, 0x1FCF, 
 0x1FBF, GDK_acute, 0x1FCE, 
-0x1FBF, 0x0342, 0x1FCF, 
 0x1FBF, GDK_dead_grave, 0x1FCD, 
 0x1FBF, GDK_dead_acute, 0x1FCE, 
 0x1FBF, GDK_dead_tilde, 0x1FCF, 
@@ -2528,7 +2567,6 @@ GDK_righttack, 0x0338, 0x22AC,
 0x1FFE, GDK_grave, 0x1FDD, 
 0x1FFE, GDK_asciitilde, 0x1FDF, 
 0x1FFE, GDK_acute, 0x1FDE, 
-0x1FFE, 0x0342, 0x1FDF, 
 0x1FFE, GDK_dead_grave, 0x1FDD, 
 0x1FFE, GDK_dead_acute, 0x1FDE, 
 0x1FFE, GDK_dead_tilde, 0x1FDF, 
@@ -2666,6 +2704,8 @@ GDK_apostrophe, GDK_macron, GDK_E, 0x1E16,
 GDK_apostrophe, GDK_macron, GDK_O, 0x1E52, 
 GDK_apostrophe, GDK_macron, GDK_e, 0x1E17, 
 GDK_apostrophe, GDK_macron, GDK_o, 0x1E53, 
+GDK_apostrophe, GDK_cedilla, GDK_C, 0x1E08, 
+GDK_apostrophe, GDK_cedilla, GDK_c, 0x1E09, 
 GDK_apostrophe, GDK_dead_circumflex, GDK_A, 0x1EA4, 
 GDK_apostrophe, GDK_dead_circumflex, GDK_E, 0x1EBE, 
 GDK_apostrophe, GDK_dead_circumflex, GDK_O, 0x1ED0, 
@@ -2950,6 +2990,8 @@ GDK_U, GDK_exclam, GDK_A, 0x1EB6,
 GDK_U, GDK_exclam, GDK_a, 0x1EB7, 
 GDK_U, GDK_comma, GDK_E, 0x1E1C, 
 GDK_U, GDK_comma, GDK_e, 0x1E1D, 
+GDK_U, GDK_cedilla, GDK_E, 0x1E1C, 
+GDK_U, GDK_cedilla, GDK_e, 0x1E1D, 
 GDK_U, GDK_dead_cedilla, GDK_E, 0x1E1C, 
 GDK_U, GDK_dead_cedilla, GDK_e, 0x1E1D, 
 GDK_U, GDK_dead_belowdot, GDK_A, 0x1EB6, 
@@ -3140,6 +3182,8 @@ GDK_b, GDK_exclam, GDK_A, 0x1EB6,
 GDK_b, GDK_exclam, GDK_a, 0x1EB7, 
 GDK_b, GDK_comma, GDK_E, 0x1E1C, 
 GDK_b, GDK_comma, GDK_e, 0x1E1D, 
+GDK_b, GDK_cedilla, GDK_E, 0x1E1C, 
+GDK_b, GDK_cedilla, GDK_e, 0x1E1D, 
 GDK_b, GDK_dead_cedilla, GDK_E, 0x1E1C, 
 GDK_b, GDK_dead_cedilla, GDK_e, 0x1E1D, 
 GDK_b, GDK_dead_belowdot, GDK_A, 0x1EB6, 
@@ -3313,6 +3357,8 @@ GDK_acute, GDK_macron, GDK_E, 0x1E16,
 GDK_acute, GDK_macron, GDK_O, 0x1E52, 
 GDK_acute, GDK_macron, GDK_e, 0x1E17, 
 GDK_acute, GDK_macron, GDK_o, 0x1E53, 
+GDK_acute, GDK_cedilla, GDK_C, 0x1E08, 
+GDK_acute, GDK_cedilla, GDK_c, 0x1E09, 
 GDK_acute, GDK_dead_circumflex, GDK_A, 0x1EA4, 
 GDK_acute, GDK_dead_circumflex, GDK_E, 0x1EBE, 
 GDK_acute, GDK_dead_circumflex, GDK_O, 0x1ED0, 
@@ -3446,21 +3492,6 @@ GDK_Greek_iota, GDK_acute, 0x1F60, 0x1FA4,
 GDK_Greek_iota, GDK_acute, 0x1F61, 0x1FA5, 
 GDK_Greek_iota, GDK_acute, 0x1F68, 0x1FAC, 
 GDK_Greek_iota, GDK_acute, 0x1F69, 0x1FAD, 
-GDK_Greek_iota, 0x0342, GDK_Greek_alpha, 0x1FB7, 
-GDK_Greek_iota, 0x0342, GDK_Greek_eta, 0x1FC7, 
-GDK_Greek_iota, 0x0342, GDK_Greek_omega, 0x1FF7, 
-GDK_Greek_iota, 0x0342, 0x1F00, 0x1F86, 
-GDK_Greek_iota, 0x0342, 0x1F01, 0x1F87, 
-GDK_Greek_iota, 0x0342, 0x1F08, 0x1F8E, 
-GDK_Greek_iota, 0x0342, 0x1F09, 0x1F8F, 
-GDK_Greek_iota, 0x0342, 0x1F20, 0x1F96, 
-GDK_Greek_iota, 0x0342, 0x1F21, 0x1F97, 
-GDK_Greek_iota, 0x0342, 0x1F28, 0x1F9E, 
-GDK_Greek_iota, 0x0342, 0x1F29, 0x1F9F, 
-GDK_Greek_iota, 0x0342, 0x1F60, 0x1FA6, 
-GDK_Greek_iota, 0x0342, 0x1F61, 0x1FA7, 
-GDK_Greek_iota, 0x0342, 0x1F68, 0x1FAE, 
-GDK_Greek_iota, 0x0342, 0x1F69, 0x1FAF, 
 GDK_Greek_iota, GDK_dead_grave, GDK_Greek_alpha, 0x1FB2, 
 GDK_Greek_iota, GDK_dead_grave, GDK_Greek_eta, 0x1FC2, 
 GDK_Greek_iota, GDK_dead_grave, GDK_Greek_omega, 0x1FF2, 
@@ -3819,30 +3850,6 @@ GDK_Greek_iota, GDK_acute, GDK_dead_dasia, GDK_Greek_OMEGA, 0x1FAD,
 GDK_Greek_iota, GDK_acute, GDK_dead_dasia, GDK_Greek_alpha, 0x1F85, 
 GDK_Greek_iota, GDK_acute, GDK_dead_dasia, GDK_Greek_eta, 0x1F95, 
 GDK_Greek_iota, GDK_acute, GDK_dead_dasia, GDK_Greek_omega, 0x1FA5, 
-GDK_Greek_iota, 0x0342, GDK_parenleft, GDK_Greek_ALPHA, 0x1F8F, 
-GDK_Greek_iota, 0x0342, GDK_parenleft, GDK_Greek_ETA, 0x1F9F, 
-GDK_Greek_iota, 0x0342, GDK_parenleft, GDK_Greek_OMEGA, 0x1FAF, 
-GDK_Greek_iota, 0x0342, GDK_parenleft, GDK_Greek_alpha, 0x1F87, 
-GDK_Greek_iota, 0x0342, GDK_parenleft, GDK_Greek_eta, 0x1F97, 
-GDK_Greek_iota, 0x0342, GDK_parenleft, GDK_Greek_omega, 0x1FA7, 
-GDK_Greek_iota, 0x0342, GDK_parenright, GDK_Greek_ALPHA, 0x1F8E, 
-GDK_Greek_iota, 0x0342, GDK_parenright, GDK_Greek_ETA, 0x1F9E, 
-GDK_Greek_iota, 0x0342, GDK_parenright, GDK_Greek_OMEGA, 0x1FAE, 
-GDK_Greek_iota, 0x0342, GDK_parenright, GDK_Greek_alpha, 0x1F86, 
-GDK_Greek_iota, 0x0342, GDK_parenright, GDK_Greek_eta, 0x1F96, 
-GDK_Greek_iota, 0x0342, GDK_parenright, GDK_Greek_omega, 0x1FA6, 
-GDK_Greek_iota, 0x0342, GDK_dead_psili, GDK_Greek_ALPHA, 0x1F8E, 
-GDK_Greek_iota, 0x0342, GDK_dead_psili, GDK_Greek_ETA, 0x1F9E, 
-GDK_Greek_iota, 0x0342, GDK_dead_psili, GDK_Greek_OMEGA, 0x1FAE, 
-GDK_Greek_iota, 0x0342, GDK_dead_psili, GDK_Greek_alpha, 0x1F86, 
-GDK_Greek_iota, 0x0342, GDK_dead_psili, GDK_Greek_eta, 0x1F96, 
-GDK_Greek_iota, 0x0342, GDK_dead_psili, GDK_Greek_omega, 0x1FA6, 
-GDK_Greek_iota, 0x0342, GDK_dead_dasia, GDK_Greek_ALPHA, 0x1F8F, 
-GDK_Greek_iota, 0x0342, GDK_dead_dasia, GDK_Greek_ETA, 0x1F9F, 
-GDK_Greek_iota, 0x0342, GDK_dead_dasia, GDK_Greek_OMEGA, 0x1FAF, 
-GDK_Greek_iota, 0x0342, GDK_dead_dasia, GDK_Greek_alpha, 0x1F87, 
-GDK_Greek_iota, 0x0342, GDK_dead_dasia, GDK_Greek_eta, 0x1F97, 
-GDK_Greek_iota, 0x0342, GDK_dead_dasia, GDK_Greek_omega, 0x1FA7, 
 GDK_Greek_iota, GDK_dead_grave, GDK_parenleft, GDK_Greek_ALPHA, 0x1F8B, 
 GDK_Greek_iota, GDK_dead_grave, GDK_parenleft, GDK_Greek_ETA, 0x1F9B, 
 GDK_Greek_iota, GDK_dead_grave, GDK_parenleft, GDK_Greek_OMEGA, 0x1FAB,